<?php

/**
 * Model abstract class for module 
 *
 * @category   Magestore
 * @package    Magestore_Mageconnector
 * @author     Nguyen Minh Dung (http://oss.com.vn)
 */
abstract class Magestore_Mageconnector_Model_Abstract {

    /**
     * Get store by base Url
     *
     * @param string $baseUrl
     * @param string $storeCode
     * @return Mage_Core_Model_Store
     */
    public function getStore($baseUrl, $storeCode = null) {
        static $_baseUrl = null, $_storeCode = null, $store = null;
        if ($_baseUrl == $baseUrl && $_storeCode == $storeCode && $store instanceof Mage_Core_Model_Store) {
            return $store;
        }

        if (is_null($storeCode) || $storeCode == '') {
            $store = Mage::helper('mageconnector')->getDefaultStoreByStoreBaseUrl($baseUrl);
        } else {
            $store = Mage::getModel('core/store')->load($storeCode);
            $baseUrl = str_replace('www.', '', $baseUrl);
            $baseUrl = str_replace('http://', '', $baseUrl);
            $baseUrl = str_replace('https://', '', $baseUrl);
            $storeBaseUrlConfig = Mage::app()->getStore($store->getId())->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
            $storeBaseUrlConfig = str_replace('www.', '', $storeBaseUrlConfig);
            $storeBaseUrlConfig = str_replace('http://', '', $storeBaseUrlConfig);
            $storeBaseUrlConfig = str_replace('https://', '', $storeBaseUrlConfig);

            if ($storeBaseUrlConfig != $baseUrl) {
                throw new Magestore_Mageconnector_Exception(Magestore_Mageconnector_Exception::BASE_URL_INVALID);
            }
        }
        return $store;
    }

    public function prepareUrl($baseUrl, $url, $storeCode = null) {
        $url = split('index.php', $url);
        $url = ltrim($url[1], '/');
        if ($this->currentStoreAddStoreCodeInUrl()) {
            $code = $this->getStoreCodeInCurrentUrl();
            $url = str_replace($code, '', $url);
            $url = str_replace($storeCode . '/', '', $url);
            return $baseUrl . 'index.php/' . $storeCode . '/' . $url;
        } else if (!is_null($storeCode)) {
            $defaultStore = Mage::helper('mageconnector')->getDefaultStoreByStoreBaseUrl($baseUrl);
            if ($storeCode == $defaultStore->getCode() || strpos($url, '?___store=') > 0) {
                return $baseUrl . 'index.php/' . $url;
            } else {
                return $baseUrl . 'index.php/' . $url . '?___store=' . $storeCode;
            }
        } else {
            return $baseUrl . 'index.php/' . $url;
        }
    }

    /**
     * Check current website add store code in url or not
     *
     * @return bool
     */
    public function currentStoreAddStoreCodeInUrl() {
        static $webUrlUseStoreCode = null;
        if (is_null($webUrlUseStoreCode)) {
            $webUrlUseStoreCode = Mage::getStoreConfig('web/url/use_store');
        }
        return $webUrlUseStoreCode;
    }

    /**
     *
     * @param string $baseUrl
     * @return string
     */
    public function getStoreCodeInCurrentUrl() {
        static $storeCode = '';
        if ($storeCode == '' && $this->currentStoreAddStoreCodeInUrl()) {
            $parts = split('index.php/', Mage::getUrl());
            $parts = split('/', $parts[1]);
            $storeCode = $parts[0] . '/';
        }
        return $storeCode;
    }

}